package com.xyz.PriorityQueue;

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

public class Main {
    public static void main(String[] args) {
        Queue<User> q = new PriorityQueue<>(new UserComparator());
        // 添加3个元素到队列:
        q.offer(new User("Bob", "A1"));
        q.offer(new User("Alice", "A2"));
        q.offer(new User("Boss", "V1"));
        System.out.println(q.poll()); // Boss/V1
        System.out.println(q.poll()); // Bob/A1
        System.out.println(q.poll()); // Alice/A2
        System.out.println(q.poll()); // null,因为队列为空
    }
}

//定义了一个实现了 Compartor 接口的对比类
//这种对比类，用来对我们的自定义类 User 的集合进行排序
class UserComparator implements Comparator<User> {
    // Compartor 接口，要实现的实际上就是一个方法 ： compare
    // 两个参数，就是用来比较的我们自定义类的对象
    // compare 返回值类型是固定的，必须为整数
    // 如果比较的 对象1 > 对象2 ，返回 1
    // 反之，返回 -1
    // 排序默认为正序，小的在前，大的在后
    public int compare(User u1, User u2) {
        // 字符串对象.charAt(index)将字符串当做字符数组来处理，返回指定索引位的字符
        // 比较第一位的字符
        if (u1.number.charAt(0) == u2.number.charAt(0)) {
            // 如果两人的号都是A开头或者都是V开头,比较号的大小:
            // 按字符串的比较方式比较
            return u1.number.compareTo(u2.number);
        }
        //谁以 V 开头，就代表 vip ，优先级高，排在队列前面，
        //比较时认为其较小，返回 -1
        if (u1.number.charAt(0) == 'V') {
            // u1的号码是V开头,优先级高:
            return -1;
        } else {
            return 1;
        }
    }
}

// 自定义用户类
class User {
    //两个字段，名字和号码
    //都是字符串类型
    public final String name;
    public final String number;

    public User(String name, String number) {
        this.name = name;
        this.number = number;
    }

    public String toString() {
        return name + "/" + number;
    }
}